﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using RiskCalc.Teste;

namespace RiskCalc.Interface
{
    public partial class RiskCalc : Form
    {
        public RiskCalc()
        {
            // (Ignorar) Método obrigatório do Designer do .NET
            InitializeComponent();
        }

        private void RiskCalc_Load(object sender, EventArgs e)
        {
            string mensagemRetornada;
            List<Tempo> vetTempos;

            // Seta o numero de processadores
            lblTxtNumeroCores.Text = Environment.ProcessorCount.ToString();

            // Inicia novo teste
            ControladorTeste teste = new ControladorTeste();

            if(teste.calcularVarParametrico(95, 100, out vetTempos, out mensagemRetornada))
            {
                // Carrega na interface
                dgvTempos.DataSource = vetTempos;
            }
            else
            {
                MessageBox.Show(mensagemRetornada);
            }
        }
    }
}

// Falta implementar (em ordem de prioridade):

// 0- Calcular a média e desviopadrão apenas uma vez para cada ativo, baseado na janela de tempo utilizada, a correl está calculando várias vezes para cada ativo e o VaR tambem.
// 0- Fazer if(_VaRAritmetico == null) Calculos.calcularVarAritmetico(this.blablabla)
// 0- Corrigir: VaR Historico da carteira é o percentil do vetor da soma dos retornos historicos dos ativos em cada dia (aritmetico e geometrico)
// 0- Erro no Excel

// 1- Fazer select no banco pegando apenas os top(janela de dias) antes do dia desejado para o VaR
// 2- Tratamento de erro de numeração da planilha gerada não está funcionando

// 6- Interface de configuração (janela dias, dia do VaR, opcoes de relatorio) 

// 11- Instalar @Risk e Crystal Ball e testar / http://en.wikipedia.org/wiki/Monte_Carlo_methods_in_finance

// Opcional:
// 13- Fazer para várias carteiras vetCarteira onde Carteira possui varCarteira
// 14- Progress bar completa p/ excel e monte carlo

// Otimizações:
// 18 - Investigar pré-requisitos da biblioteca .net parallels


// Neste projeto final eu aprendi detalhadamente conceitos de: 
// 1- Estatistica 
// 2- Finanças
// 3- Geração e Teste de Numeros Aleatorios
// 4- Paralelismo/Multi-threading

// Interface -> Teste(Controlador) -> Modelo -> Persistencia 